package cn.sxt.logistics.service.impl;

import cn.sxt.logistics.mapper.RolePermissionMapper;
import cn.sxt.logistics.pojo.Role;
import cn.sxt.logistics.mapper.RoleMapper;
import cn.sxt.logistics.pojo.RolePermission;
import cn.sxt.logistics.service.IRoleService;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author ${author}
 * @since 2020-06-13
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IRoleService {

    //注入角色权限中间表Mapper
    @Autowired
    private RolePermissionMapper rolePermissionMapper;

    @Transactional(readOnly = false)
    public boolean saveOrUpdate(Role role, Long[] permissionIds) {


        //1.完成角色基本表的新增或者修改操作
        //有id修改，没有id新增
        boolean flag = this.saveOrUpdate(role);

        /**
         *  2.完成角色权限表中间表数据的操作
         *  操作思路
         *   2.1先删除中间表之前对应角色id的所有数据（不管是新增还是修改，新增删除的数据就的空数据没有）
         *   2.2再将前台传递的权限id插入到中间表中
         */
        // 2.1先删除中间表之前对应角色id的所有数据（不管是新增还是修改，新增删除的数据就的空数据没有）
        UpdateWrapper<RolePermission> roloPermissionUpdateWrapper = new UpdateWrapper<>();
        roloPermissionUpdateWrapper.eq("role_id",role.getRoleId());
        rolePermissionMapper.delete(roloPermissionUpdateWrapper);
        // 2.2再将前台传递的权限id插入到中间表中
        for (Long permissionId : permissionIds) {
            //创建角色权限对象
            RolePermission rolePermission = new RolePermission();
            //设置角色id
            rolePermission.setRoleId(role.getRoleId());
            //设置权限id
            rolePermission.setPermissionId(permissionId);
            //每次循环插入数据
            rolePermissionMapper.insert(rolePermission);
        }



        return flag;
    }
}
